# 静态方法
# 定义：静态方法是属于类的方法，但它与类的实例和类本身没有直接关联，它不依赖于类属性和实例属性，也不会对类属性和实例属性进行修改。
# 创建方式：使用 @staticmethod 装饰器定义。
# 访问方式：可以通过类名或实例对象调用
class Person:
    c = 10
    def __init__(self, username, age):
        self.username = username
        self.age = age
        print(f'my name is {self.username}, my age is {self.age}')

    @staticmethod
    def show():
        # print(f'my name is {Person.username}, my age is {Person.age}')  # 无法在静态方法中通过类名访问实例属性
        print(f'c = {Person.c}')    # 静态方法中可以通过类名访问类属性

class Test:
    age = 26
    def __init__(self,username):
        self.username = username

    @staticmethod
    def show(obj):
        # 无法在静态方法中通过类名访问实例属性
        # print(f'my name is {Test.username}, my age is {Test.age}')    #报错
        # 无法直接使用类属性和实例属性，可以通过间接传入一个实例或者类对象来访问相关属性
        # print(f'my age = {age}')       #报错
        print(f'my age = {Test.age}')   # my age = 26
        # 无法在静态方法中通过类名访问实例属性
        # print(f'my name = {Test.username}') # 报错
        # 通过传入一个实例对象来访问实例属性
        print(f'my name = {obj.username}')  # my name = cendy
        print(f'my name is {obj.username}, my age is {obj.age}')    # my name is cendy, my age is 26

def start_Person():
    person = Person('张三', 18)
    # print('通过类名调用静态方法：')
    # Person.show()
    # print('通过实例对象调用静态方法：')
    # person.show()
    # print(Person.c)
    # print(person.username, person.age)
    person.show()

def start_Test():
    test = Test('cendy')
    test.show(test)

if __name__ == '__main__':
    # start_Person()
    start_Test()